// See https://aka.ms/new-console-template for more information
using BootstrapBlazorApp.Server.LLMs;
using BootstrapBlazorApp.Server.LLMs.model.Kimi;
using BootstrapBlazorApp.Server.Service;
using System.ComponentModel;
using BootstrapBlazorApp.Server.LLMs.chain;
using BootstrapBlazorApp.Server.Service;

class User
{
    [Description("用户名")]
    public string Name { get; set; } = "张三";
}

internal class Program
{
    public static async Task Main(string[] args)
    {
        // KimiConfig config = new KimiConfig("sk-FFBqRHmUD5EqIDJWfwH0xrfegU38rsGuwmN1JD6Z2lxFZ1IU");
        // var kimi = new ChatKimi(config);
        // await foreach (var response in kimi.InvokeStreamAsync("你好"))
        // {
        //     Console.Write(response.IncrementalOutput);
        // }
        LlmChainService service = new LlmChainService();
        string question = "说说 List, Set, Queue, Map 四者的区别？";
        string standardanswer = """
                                List(对付顺序的好帮手): 存储的元素是有序的、可重复的。 Set(注重独一无二的性质): 存储的元素不可重复的。 Queue(实现排队功能的叫号机): 按特定的排队规则来确定先后顺序，存储的元素是有序的、可重复的。 Map(用 key 来搜索的专家): 使用键值对（key-value）存储，类似于数学上的函数 y=f(x)，"x" 代表 key，"y" 代表 value，key 是无序的、不可重复的，value 是无序的、可重复的，每个键最多映射到一个值。
                                """;
        string answer = """
                        List: 有序、可重复、随机访问。
                        Set: 无序、不可重复、快速查找。
                        Queue: 有序、先进先出。
                        Map: 键值对、唯一键、快速访问。
                        """;
        var scoreChainAsync = await service.ScoreChainAsync(question,answer,standardanswer,"kimi");
        Console.WriteLine("评分:"+scoreChainAsync["score"]);
        Console.WriteLine("总评:"+scoreChainAsync["comment"]);
        
        await foreach (string se in service.DetailChainStream(question,answer,standardanswer,scoreChainAsync))
        {
            Console.Write(se);
        }


    }

}
